https://leetcode.cn/problems/add-two-numbers/submissions/443723350/
2. 两数相加
给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
请你将两个数相加，并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外，这两个数都不会以 0 开头。

 
本位+进位 

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode*head=NULL,*tail=NULL;
    int carry=0;
    while(l1||l2)
    {
        int n1=l1?l1->val:0;
        int n2=l2?l2->val:0;

        if(head==NULL)
        {

            head=tail=(struct ListNode*)malloc(sizeof(struct ListNode));
            tail->val=(n1+n2+carry)%10;
            tail->next=NULL;
        }
        else
        {
            tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));
            tail->next->val=(n1+n2+carry)%10;
            tail=tail->next;
            tail->next=NULL;
        }

        carry=(n1+n2+carry)/10;
        if(l1){
            l1=l1->next;
        }
        if(l2){
            l2=l2->next;
        }

    }
    if(carry)
    {
        tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));
        tail->next->val=carry;
        tail->next->next=NULL;
    }    
    return head;
}